import java.util.*;

import org.testng.annotations.Test;

import es.cea.core.scopes.Sesion;

public class TestRegistro {

	@Test
	public void pruebaRegistroCorrecto() throws ClaveIncorrectaException,
			UsuarioNoExisteException {

		// el programa a probar
		ServicioRegistro servicioRegistro = new ServicioRegistro();

		// Escenario de la prueba: preparar la informacion de los objetos antes
		// de la invocacion
		// preparar la sesion
		Sesion sesion = new Sesion();

		// preparar la bd de usuarios
		Usuario usuario1 = new Usuario("roi", "YYY");
		Usuario usuario2 = new Usuario("juan", "JJJ");

		List<Usuario> listaUsuario = new ArrayList<Usuario>();

		listaUsuario.add(usuario1);
		listaUsuario.add(usuario2);

		BDUsuario bdUsuario = new BDUsuario();
		bdUsuario.lUsuario = listaUsuario;

		// el objeto (programa) a invocar
		servicioRegistro.bDUsuario = bdUsuario;
		servicioRegistro.sesion = sesion;

		// invocacion del programa
		Usuario usuario = servicioRegistro.registra("juan", "JJJ");
		// asertar los resultados
		assert (usuario != null);
		assert (usuario.getUsuario().equals("juan"));

	}

	@Test
	public void pruebaRegistroClaveIncorrecta() throws UsuarioNoExisteException {

		// el programa a probar
		ServicioRegistro servicioRegistro = new ServicioRegistro();

		// Escenario de la prueba: preparar la informacion de los objetos antes
		// de la invocacion
		// preparar la sesion
		Sesion sesion = new Sesion();

		// preparar la bd de usuarios
		Usuario usuario1 = new Usuario("roi", "YYY");
		Usuario usuario2 = new Usuario("juan", "JJJ");

		List<Usuario> listaUsuario = new ArrayList<Usuario>();

		listaUsuario.add(usuario1);
		listaUsuario.add(usuario2);

		BDUsuario bdUsuario = new BDUsuario();
		bdUsuario.lUsuario = listaUsuario;

		// el objeto (programa) a invocar
		servicioRegistro.bDUsuario = bdUsuario;
		servicioRegistro.sesion = sesion;

		// invocacion del programa
		Usuario usuario;
		try {

			usuario = servicioRegistro.registra("juan", "equivocada");

			assert (false) : " deberia haber lanzado una excepcion!";
		} catch (ClaveIncorrectaException e) {

			e.printStackTrace();
		}
		// asertar los resultados

	}

	@Test
	public void pruebaRegistroUsuarioIncorrecto()
			throws ClaveIncorrectaException {

		// el programa a probar
		ServicioRegistro servicioRegistro = new ServicioRegistro();

		// Escenario de la prueba: preparar la informacion de los objetos antes
		// de la invocacion
		// preparar la sesion
		Sesion sesion = new Sesion();

		// preparar la bd de usuarios
		Usuario usuario1 = new Usuario("roi", "YYY");
		Usuario usuario2 = new Usuario("juan", "JJJ");

		List<Usuario> listaUsuario = new ArrayList<Usuario>();

		listaUsuario.add(usuario1);
		listaUsuario.add(usuario2);

		BDUsuario bdUsuario = new BDUsuario();
		bdUsuario.lUsuario = listaUsuario;

		// el objeto (programa) a invocar
		servicioRegistro.bDUsuario = bdUsuario;
		servicioRegistro.sesion = sesion;

		// invocacion del programa
		Usuario usuario;

		try {
			usuario = servicioRegistro.registra("pepe", "tttt");
			assert (false) : " deberia haber lanzado una excepcion!";
		} catch (UsuarioNoExisteException e) {

			e.printStackTrace();
		}

	}
}
